// 封装购物车
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
import  {useUserStore} from "@/stores/user.js"
import { findNewCartListAPI, insertCartApI,delCartAPI } from "@/apis/cart.js"

export const useCartStore = defineStore("cartStore",()=>{
  let user = useUserStore()
  let cartList = ref([])
  const  addCart =async(product)=> {
    if(!user.userInfo.token) {
    // 不存在token。 
    // 分为两种情况。
      // 1. 本地存储中没有数据。 直接添加到本地存储中
// 2. 本地存储中有数据。 先取出， 再添加到数组中， 再存回

// find()查找一个，foreach是整个数组。，
      let item = cartList.value.find(item=>item.skuId==product.skuId)
        if(item){
          item.num++;
        }else{
          cartList.value.push(product)
        }
    }else{
      console.log("存在token");
      // 存在token
      await  insertCartApI({skuId:product.skuId,count:product.num}) 
      let res= await findNewCartListAPI()
      cartList.value=res.result  
    }
  }
  
// 删除购物车商品
  const delCart=async(skuId)=>{
    console.log("调用delCart方法"+skuId);
    if(user.userInfo.token){
      // 存在token
      console.log("存在token");
      // 删除服务器数据
      await delCartAPI([ skuId] )
      // 请求新的数据
      let res= await findNewCartListAPI()
      // 更新本地数据
      cartList.value=res.result
    }else{
      console.log("不存在token");
      let index=cartList.value.findIndex((item)=>  skuId==item.skuId )
      cartList.value.splice(index,1)
    }
  }

   const clearCart=()=>{
    cartList.value=[]
  }

  return {
    cartList,
    addCart,
    delCart,
    clearCart,
  }
},{
  persist: true,
} )